<?php
/**
 * Created by phpstrom.
 * User:wangyahe
 * Date: 2017/6/23
 * Time: 11:32
 */
//---------------问题
//1·	//定义模板路径常量在那里进行了使用
//		define(__TEMPLATE__,__ROOT__.'/' . $this->template);
//2.就是die那里？
//3.一些图片的地址是什么？就如下面的文章标签的拼接的url的地址；
//4.还有就是标签为什么生成测试的那个东西？？？
//5.还有就是显示写controller还是先写前台页面的数据的分配呀？所以那个entry？
//答：这里就是通过自定义标签去数据库中获得数据，然后将数据分配到index.php的页面中，然后通过页面传递参数到地址栏中，然后------通过路由解析地址栏，然后到-----------entry中的方法，（同时会获得get参数，然后通过get参数到数据表中查找数据，查找到数据后再将数据分配到页面中）
//6.wechat,php的模型中加上这样一段angularjs的代码；??????就是微信的二级菜单那里
//7.还有就是菜单的点击事件那里
//8：还有一个问题就是自定义标签哪里；的数据的获取，如果没有给自定义标签参数，那如何获得数据；？？？？？？？？？？？？？？？
//-------------------------个人总结:
//这里需要注意的是就是在写首页的时候是在循环的标签之外的，还有他的链接是{{__ROOT__}}
//1.就是使用老师的前台末班，将整个的template\default的css，js,index.php等都复制过来；
//2.然后操作前台页面的一些内容就是到app\admin\home\entry中写函数操作；整个项目的首页就是entry\index方法；
//3.然后就是配置路由，因为在整个项目的前台页面中，需要循环后台的数据包括文章的栏目页，还有就是文章的内容页，所以就是通过设置路由来加载到entry中的category()或者是content()方法；
//Route::get('/{arc_id}.html','app\home\controller\Entry@content');
//Route::get('/c/{cate_id}.html','app\home\controller\Entry@category');
//通过get参数来获得文章内容id或者是文章栏目id来加载页面，然后传到到方法中,然后相应的方法就会根据传递的参数去数据库中查找相应的数据；
//9.就是为什么在有的控制器中都要加上这个构造函数呀？？？？？？？？？？？？？
//10.就是api这个函数是在那里进行触发的呀：？？？？？？？？？？？？？？？？？？？？？
//答这个是通过微信的公众平台的url地址链接到的api这个类的，所以说是这个项目的入口文件并不是自由一个entry.php这个页面，还有api这个页面这个第三方的入口文件，这个文件就是微信的入口文件，就是当粉丝发送一个消息的时候就会触发这个url,然后通过这个url的地址就是指向到的api这个类，然后api这个第三方的入口文件主要是调用框架中的其它的类和方法；

//因为这里是使用的中间件Auth这个中间件，因为这个中间件是一个局部中间件，中间件分为全局中间件和局部中间件，然后设置成为什么中间件应该到system\config\middleware.php中去设置，然后因为config.php这个中间件是全局中中间件，所以只要将要写的东西在这里写好了以后，那整个项目的其它的地方就可以自动的使用这个中间件了然后事项中间件中的方法的功能，然后Auth.php这个中间件是个局部中间件，因为有的地方会用到这个中间件中的方法的功能，有的地方不用，所以就应该是那里进行了使用那里就应该进行调用这个中间件，所以用的迪欧放就是加上了构造函数进行了调用中间件。
//class Article extends Common {
//	use Wechat;
//	public function __construct()
//	{
//		$this->auth();
//	}      ??????????？？？？？？？？？？？？？？？？？？？？？？

//	还有就是component.php是用来管理上传的因为使用了百度编辑器插件，哪里会有图片上传，这里的这个累就是管理图片上传和删除的；











///**
//* 网站首页
//* @return bool|mixed
//	*/
//    public function index(){
    	//页面的title和css样式的配置项，在common.html中进行填写
//	$headConf = [
//		'title'=>'首页',
//		'css'=>['index'],
//	];
	//然后加载模板进行数据的分配
//	return view($this->template.'/index.html',compact('headConf'));
	//然后写着一句的时候会追溯到好多的内容，就是$this->template，在home\entry的构造方法中定义了一个属性，所以$this->template就是调用这个属性，然后构造方法将要加载的模板的路径赋值给这个属性。
//	$this->template = 'template/' . (IS_MOBILE ? 'mobile' : 'web'). '/' . v('config.template');
//	template/web/default然后后面再跟上$this->template.'/index.html'就是一个完整的模板的路径，然后将headConf变量进行分配到页面中;
}//网站首页结束
//这是entry里面的构造函数
//public function __construct ()
//{
//	$this->template = 'template/' . ( IS_MOBILE ? 'mobile' : 'web' ) . '/' . v('config.template');
	//p($this->template);
	//定义模板路径常量
//	define(__TEMPLATE__,__ROOT__.'/' . $this->template);
	//注意该方法里面的die,调用runModule方法，就是来进行实例化类来加载函数；
//	$res = $this->runModule();
//}

/**
 * 栏目页面
 */
//public function category()
//{
	//1.配置项
//	$headConf = [
//		'title'=>'列表页',
//		'css'=>['list_article'],
//	];
	//2.接收地址栏参数到
//	$cate_id = Request::get('cate_id');
	//3.将通过get获得的参数到Category的数据表中查找栏目数据
//	$cms_field = Category::find($cate_id);
	//4.就是将获得的数据分配到前台页面
//	return view($this->template . '/list.html',compact('headConf','cms_field'));
//}
//然后上面的分配的数据都是一条数据，要想着将所有的数据都分配出来就是通过扩展标签来实现数据的循环，所以就应该自己定义标签，到手册中搜索扩展标签；
//1.创建扩展标签：php hd make:tag Common,这样就会在system\tag\common.php类然后在这里面进行创建扩展标签
//2.在system\config\里面的：进行修改配置'tags'=> [system\tag\Common::class]
//3.然后就是到common.php中进行扩展标签的创建了；eg:以文章页的标签为例：
//然后需要注意的是：页面--数据--标签，这三者之间的关联是：通过entry中的具体的函数方法来想数据表获得数据，并将数据进行分配到前台页面中，然后有需要循环的数据就需要标签将其循环。就要到common.php中进行创建标签，通过标签循环数据。
//文章列表函数定义标签:用于将左侧的课程安排的数据循环出来，就是文章的标题,所以使用的是
//public function _arclist($attr, $content, &$view)
//{
//	$cid = isset($attr['cid']) ? $attr['cid'] : -1;
//	$thumb = isset($attr['thumb']) ? $attr['thumb'] : -1;
//	$str = <<<str
//				<?php
//					\$db= Db::table('article');
//					if('$cid'>=0){
//					    \$db->whereIn('cate_id',explode(',','$cid'));
//					}
//            		if($thumb==1){---//然后注意的是这里$thumb//中的$是不需要进行转义的
//					    \$db->where('arc_thumb','<>','');//--这句话的作用是将数据表中查找arc_thumb不等于空的字段。
//					}
//					\$data = \$db->get();
//					foreach(\$data as \$field):
//					    \$field['arc_thumb'] = __ROOT__ . '/' .  \$field['arc_thumb'] ;
//
					    //这里是上面的创建完后在实际上解析出来的样子： // $field['arc_thumb'] = __ROOT__ . '/' .  $field['arc_thumb'] ;
//					    \$field['url'] = __ROOT__ . '/' .  \$field['arc_id'] . '.html' ;
//				?><!-- -->
//					$content
				<?php
//					endforeach
				?>
//str;
//	return $str;
//}//文章列表函数结束

//下面这一部分是前台页面的显示结果；

//<ul class="product_list">
//				<arclist cid="4" thumb="1">
//					<li>
//						<a href="{{$field['url']}}" class="pic"><img src="{{$field['arc_thumb']}}" /></a>
//						<a href="{{$field['url']}}" class="product_title">{{$field['arc_title']}}</a>
//						<p>{{$field['arc_description']}}</p>
//					</li>
//				</arclist>
//			</ul>

//然后就将数据进行循环出来了

//---------------------
	//首先是将整个首页进行分割了，将热门关键词和搜索即以上的都放到了common中了，然后还有就是将友情链接及以下的东西也是都放到了common.html当中了；
//剩下的是content.html 是文章的内容页面，具体的文章的内容页
//还有还有就是index.html是真个项目的首页。
//还有是list.html是栏目的具体页：就是列表页；在这个页面的那的栏目列表是与首页的一样的；在list页面下的是显示该栏目下的所有文章；
//那现在就来看一下这个自己定义的别的标签


//首先看一下自定义的category标签，然后就是应该改先看index.php的中床底了哪些的参数，然后看entry中的方法并接收参数分配数据，然后再看index.php,然后再是看自定义标签；
public function _category( $attr, $content, &$view ) {
$pid = isset($attr['pid']) ? $attr['pid'] : -1;
//看解析成了什么，看编译文件
//转义不转义变量
$str = <<<str
				<?php
					\$db= Db::table('category');
					if($pid>=0){
						\$db->where('cate_pid',$pid);
					}
					\$data = \$db->get();
					foreach(\$data as \$field):
				?>
					$content
				<?php
					endforeach
				?>
str;
return $str;
//		return 'tag标签 测试内容';
}//category函数结束


//然后到轮播图的自定义标签
public function _slide( $attr, $content, &$view ) {
str=<<<str
   <? php
//   1.确定数据表
//   \$db=Db::table('slide');
//   2.将数据表中的数据取出来
//   \$data=\$db->get();
   //3.然后就是有图片和url地址的就进行循环
//   foreach(\$data as \$field):  而且这里还有分号 注意这里的foreach循环是没有$k和$v的是将数据全部分配给$field;
//4.然后将图片的地址拼接出来
//\$field['slide_thumb']=__ROOT__.'/'.'\$field['slide_thumb']';
?>
$content
<？php
endforeach
?>
str;
return str;
}//轮播图页面显示完毕

//然后进行创建文章签边间栏目中的文章显示出来
//public function _arclist($attr, $content, &$view)
//{
//	$cid = isset($attr['cid']) ? $attr['cid'] : -1;
//	$thumb = isset($attr['thumb']) ? $attr['thumb'] : -1;
//	$str = <<<str
	/>			<?php
					\$db= Db::table('article');
					if('$cid'>=0){
					    \$db->whereIn('cate_id',explode(',','$cid'));
					}
					if($thumb==1){
					    \$db->where('arc_thumb','<>','');
					}
					\$data = \$db->get();
					foreach(\$data as \$field):
					    \$field['arc_thumb'] = __ROOT__ . '/' .  \$field['arc_thumb'] ;
					    \$field['url'] = __ROOT__ . '/' .  \$field['arc_id'] . '.html' ;
				?> 
					$content
				<?php
					endforeach
				?>
str;
	return $str;
}//文章列表函数结束

//然后下面的就是感恩毕业季的就是将所有的文章都显示出来


//<!--产品列表-->
//			<ul class="product_list">
//				<arclist cid="4" thumb="1">
//					<li>
//						<a href="{{$field['url']}}" class="pic"><img src="{{$field['arc_thumb']}}" /></a>
//						<a href="{{$field['url']}}" class="product_title">{{$field['arc_title']}}</a>
//						<p>{{$field['arc_description']}}</p>
//					</li>
//				</arclist>
//			</ul>
//			<!--产品列表结束-->
//这里的产品列表是点击传递参数的是通过<a href="{{$field['url']}}" >href参数传递过来的；
//百度编辑器自己会加上样式的，就是可能会加上一些标签；如p标签等；
//还有就是分页那；就是在list的哪个页面写上
//<div class="pagelist">
//				{{$data->links()}}
//
//			</div>
//然后先是在common.php中通过给article加上属性row来进行判断是否分页
//然后再进行文章页面的循环的时候是判断
//public function _arclist ( $attr , $content , &$view )
//{
//	$cid   = isset( $attr[ 'cid' ] ) ? $attr[ 'cid' ] : (Request::get('cate_id') ? : -1);


//-------------------------将前台页面的数据进行循环出来以后就是来设置微信模块的菜单列表和菜单添加了；

//1.首先在module\添加button；
//然后在button中加上controller和system还有就是template这三个文件夹；然后将自己写好的微信的二级菜单的页面复制过来，并且要在wechat,php的模型中加上这样一段angularjs的代码；
//<script>
//require(['util', 'underscore'], function (util, _) {
//	require(['angular', 'jquery'], function (angular,$) {
//		angular.module('app', []).controller('ctrl', ['$scope', function ($scope) {
//			if (angular.isFunction(controller)) {
//				controller($scope, $, _);
//			}
//		}]);
//		相当于ng-app="app"，有了这句话不需要再body再写ng-app='app'
//		angular.bootstrap(document.getElementsByTagName('body'), ['app']);
//	});
//    });
//</script>

////然后就是和微信的通信了：
////所以应该到app\wechat\api\handler中进行设置；其中这里面的步骤是：
////1.测试回复消息是否正常，实例化message这个类
//$instance = Wechat::instance( 'message' );
////2.//在config表中回去字段为wechat_system_response值先到config表格中查找微信的系统的默认回复消息
//$wechat_system_response= Config::find(1)->wechat_system_response;
////3.并将找的的默认回复消息转换成数组的形式
//$wechat_system_response = json_decode($wechat_system_response,true);
////4.然后判断是否是关注事件
//if ($instance->isSubscribeEvent())
//{
//	//向用户回复消息
//	$instance->text($wechat_system_response['welcome']);
//}
////5.获得粉丝发过来的消息内容
//$content = $instance->Content;
////6.判断粉丝发过来的消息内容是否是关键词
//$this->parseKeywords($content);
////7.就是没有进行6哪一步说明粉丝发过来的内容不是关键词
////获取默认回复的消息内容default_message，判断微信系统默认回复的设置是否正好设置了一个关键词
////如果你默认回复消息，恰好是一个关键词，那么当你随便输入的时候，回复该关键词对应的内容
//$this->parseKeywords($wechat_system_response['default_message']);
////8.//菜单的点击事件
//		//houdunwang/wechat替换
//		$button = WeChat::instance('button');//这里是实例化button这个类；
////然后判断是否是菜单的点击事件
//		if ($button->isClickEvent()) {
////			//获取消息内容
//			file_put_contents('./aaa.php',var_export($content));//这里是用来进行测试用的，所以可以将其注释掉
////			//向用户回复消息
////			$instance->text("点击了菜单,EventKey: {$instance->EventKey}");//
//			//然后在进行判断是不是关键字
//			$this->parseKeywords($instance->EventKey);
//		}
//
////去除默认消息进行恢复给粉丝（如果上面的都没有进行成功那么就将回复给粉丝的是默认回复）
//		$instance->text($wechat_system_response['default_message']);
////如果上面的是有一个是关键字成立的话就会到module\base\system\processor中进行恢复了
//
////------------------------然后还有就是设置网站的：设置前台加载模板那里：
////1.即是首先在template\中添加一个自己的另外一个模板的文件夹；然后给系统设置的config数据表中的system字段加上一个template的字段；
////然后就是在app\home\entry中的构造方法里面进行加载到这个模板，然后就是必须是要经过中间件的处理，然后通过v函数将其实例化出来;
////public function __construct ()
////{
////	$this->template = 'template/' . ( IS_MOBILE ? 'mobile' : 'web' ) . '/' . v( 'config.template' );
////}
////然后还有就是当点击一个导航条的时候会自动加载到list页面是通过路由进行加载的，然后通过路由跳转到相应的方法中。
////1.先把轮播图给弄出来吧；
////还有就是在list.html的分页中是只是使用了arclist标签并没有使用cid，然而每篇文章中选出的还是每个栏目下的文章，是因为在arclist的标签中添加了一个三元表达式；
////还有就是list页面那显示的是栏目的缩略图；那的img 的src的那里是没有使用自定义标签，那那里的数据如何获得，是通过entry中的category的方法来获得的；所以图片的链接地址是需要拼接的；不响自定义标签中的url已经拼接好了；
















